卡一个问题卡了很久,记录一下。
最近在搞 Mac 一个 App 带上 HelperApp,所以就需要有一个 Framework 工程,存放主 App 和 HelperApp 共用的代码。
由于主 App 和 HelperApp 可能都会用到同一个点第三方库,所以就会出现 [主 App 和 HelperApp] -> [MyFramework] -> [ThirdPartyFramework] 这样的依赖情况。
我另外一篇文章里有说过这种情况怎么搞。
但是我配置完后出现一个问题,在 MyFramework 里面使用第三方 Framework 时,在头文件中导入第三方 Framework,类似这样 #import "ThirdPartyFramework/ThirdPartyFramework.h",Xcode 给了个红色的报错:Include of non-modular header inside framework module。
在 Stack Overflow 上搜了,基本解决方法都是2种:
- 把#import 放到 .m 中,不要放到 .h 中。 这样的确不报错了,但是我要编写这个类的子类,#import 一定要放到头文件里才行
- 配置 Allow Non*-modular Includes* inFramework Modules 为 YES。 试了无效
最后搜到这篇文章:Understanding Objective-C Modules | Sam Symons,我使用的第三方 Framework 也是以库工程在 Workspace 中的,我发现我用的第三方 Framework 的 Build Settings 中,Defines Module 为 NO, 改为 YES 后就没有报错了。
Xcode 创建 Framework 工程,默认就是使用 Module 的,估计是因为我用的第三方 Framework 是很久远的工程,所以默认没有使用 Module,导致问题。